package com.itic.appbase.framework.utils;

import java.math.BigDecimal;

/**
 * 
 * 数字及其运算工具类.
 * <p>
 * Company: itic
 * </p>
 * 利用BigDecimal进行string型数字运算. 常见数字格式化.
 * 
 * @author: idong
 * @date: Jul 22, 2015 10:18:31 AM
 * @version: V1.0
 */
public class NumberStringHelper {
	

    /**
     * 减法.STRING
     * @param d1
     * @param d2(被减数)
     * @return
     */
    public static String subtractString(String d1, String d2) {
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.subtract(b2).toString();
    }
	
	/**
     * 乘法.STRING
     * 
     * @param d1
     * @param d2
     * @return
     */
    public static String mulString(String d1, String d2) {
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.multiply(b2).toString();
    }
    
    /**
     * 加法.STRING
     * 
     * @param d1
     * @param d2
     * @return
     */
    public static String addString(String d1, String d2) {
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.add(b2).toString();
    }
    
    /**
     * 除法.STRING
     * 
     * @param d1
     * @param d2
     * @return
     */
    public static String divString(String d1, String d2,int dian) {
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return round(b1.divide(b2,2,BigDecimal.ROUND_HALF_UP).toString(),dian);
    }
    
    
    
    /**
     * 判断一个数是否在两个数之间(包括等于).STRING
     * @param num
     * @param min
     * @param max
     * @return true为在中间，false为不在中间
     */
    public static boolean numIsMinAndMax(String num, String min, String max) {
        BigDecimal bigNum = new BigDecimal(num);
        BigDecimal bigMin = new BigDecimal(min);
        BigDecimal bigMax = new BigDecimal(max);
        int isgreatermin = bigNum.compareTo(bigMin);
        int islessmax = bigNum.compareTo(bigMax);
        if( isgreatermin == 1 && islessmax == -1 ){
        	return true;
        }else{
        	if( isgreatermin == 0 || islessmax == 0 ){
        		return true;
        	}else{
        		return false;
        	}
        }
    }
    
    /**
     * 判断one是不是大于two
     * @param one
     * @param two
     * @return one大于或是等于two返回true  反之返回false
     */
    public static boolean isGreater(String one,String two){
    	  BigDecimal oneBig = new BigDecimal(one);
          BigDecimal twoBig = new BigDecimal(two);
          int compareTo = oneBig.compareTo(twoBig);
          if( compareTo != -1 ){
        	  return true;
          }else{
        	  return false;
          }
    }
    
    /**
     * 判断one是不是大于two (Integer)
     * @author 王文鑫
     * @date 2018年1月11日 上午9:37:36
     * @param one
     * @param two
     * @return one大于或是等于two返回true  反之返回false
     */
    public static boolean isGreaterInteger(int one,int two){
  	  BigDecimal oneBig = new BigDecimal(one);
        BigDecimal twoBig = new BigDecimal(two);
        int compareTo = oneBig.compareTo(twoBig);
        if( compareTo != -1 ){
      	  return true;
        }else{
      	  return false;
        }
  }
    
    /**
     * 判断one是不是大于two
     * @param one
     * @param two
     * @return one大于two返回true  反之返回false
     */
    public static boolean isGreaterNoEqual(String one,String two){
    	  BigDecimal oneBig = new BigDecimal(one);
          BigDecimal twoBig = new BigDecimal(two);
          int compareTo = oneBig.compareTo(twoBig);
          if( compareTo != -1 && compareTo != 0 ){
        	  return true;
          }else{
        	  return false;
          }
    }
    
    
    public static String round(String v,int scale){   
    	if(scale<0){   
    		throw new IllegalArgumentException("The scale must be a positive integer or zero");   
    	}   
    	BigDecimal b = new BigDecimal(v);   
    	BigDecimal one = new BigDecimal("1");   
    	return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).toString();   
    }   
   
}
